package com.feri.project.service.impl;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.feri.project.dao.UserDao;
import com.feri.project.dto.UserLoginDto;
import com.feri.project.entity.User;
import com.feri.project.service.intf.UserService;
import com.feri.project.vo.R;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 邢朋辉
 * @Date: 2023/3/3 14:57
 */
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao dao;

    @Override
    public R save(User user) {
        //1.查询
        User u=dao.selectByName(user.getUsername());
        //2.验证是否存在
        if(u==null) {
            //3.用户名唯一 不允许重复
            if (dao.insert(user) > 0) {
                return R.ok();
            }
        }
        return R.fail();
    }

    @Override
    public R delete(int id) {
        if(dao.delete(id)>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    @Override
    public R update(User user) {
        if(dao.update(user)>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    @Override
    public R queryPage(int page, int size) {
        PageHelper.startPage(page, size);
        PageInfo<User> pageInfo=new PageInfo<>(dao.selectAll());
        return R.ok(pageInfo);
    }

    @Override
    public R login(UserLoginDto dto) {
        //1.验证参数
        if(dto!=null){
            //2.查询数据库
            User user=dao.selectByName(dto.getName());
            //3.验证是否存在账号
            if(user!=null){
                //4.验证密码是否一致
                if(user.getPassword().equals(dto.getPassword())){
                    //账号密码正确，登录成功！
                    //5.生成令牌（令牌：登录成功标识，可以很复杂，也可以很简单）
                    String token=user.getId()+"";
                    return R.ok(token);
                }
            }
        }
        return R.fail("亲，账号或密码错误！");
    }

    @Override
    public R importData(MultipartFile file) {
        //1.验证上传的内容是否非空
        if(!file.isEmpty()){

            try {
                //2.EasyExcel读取---集合
                List<User> list= EasyExcel.read(file.getInputStream(), User.class, new ReadListener() {
                    @Override
                    public void invoke(Object o, AnalysisContext analysisContext) {
                    }
                    @Override
                    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                    }
                }).doReadAllSync();

                //3.批量新增
                if(dao.insertBatch(list)>0){
                    return R.ok();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return R.fail();
    }

    @Override
    public void exportData(HttpServletResponse response) {
        //1.设置下载的响应消息头
        response.setHeader("Content-Disposition", "attachment;filename=user_" + System.currentTimeMillis()+".xlsx");
        //2.查询数据
        List<User> list=dao.selectAll();
        //3.生成Excel 同时写出
        try {
            EasyExcel.write(response.getOutputStream(),User.class).sheet("自动导出").doWrite(list);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
